home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Format CD 41
/
Amiga Format CD41 (1999-06)(Future Publishing)(GB)[!][issue 1999-07].iso
/
-seriously_amiga-
/
cd-rom
/
acdb
/
src
/
acdb.e
< prev
next >
Wrap
Text File
|
1999-04-28
|
12KB
|
457 lines
OPT OSVERSION=37,LARGE
OPT PREPROCESS,REG=5
/*
*-- AutoRev header do NOT edit!!
*
* Project : AMIGA CD BASE - program obsîugujâcy CDDB
* File : acdb.e
* Description : gîówna pëtla obsîugujâca GUI
* Copyright : ©1999, Piotr Gapiïski
* Author : Piotr Gapiïski
* Creation Date : 25.03.99
* Current version : 1.0 BETA
* Translator : AmigaE v3.3a
*
*-- REVISION HISTORY
*
* 1.0 (25.03.99)
* o nowy moduî iconify_plugin reagujâcy takûe na CTRL-F
* o port arexx'a
* o wprowadzone wagi bîëdów (niektóre majâ koïczyê program a niektóre tylko ostrzegaê)
* o nowe tooltype DISKS, TEMP, CDTIME, TRACKTIME
* o sprawdzanie czy zapisywany (write_id) cdid pîyty juû istnije w DISKS
* o niektóre bîëdy wpîywajâ bezpoôrednio na nazwy plików w TEMP
*
*
*-- TODO
* o podczas ikonifikacji programu nie dziaîa port Arexx'a
* o poprawiê úródîówkë
*
*-- REV_END --*
*/
MODULE 'tools/EasyGUI','easygui/plugins/iconify'
MODULE 'intuition/intuition','intuition/screens',
'workbench/workbench','workbench/startup',
'exec/nodes','exec/lists','dos/dos','dos/dosextens','dos/exall','utility/tagitem',
'libraries/reqtools','reqtools','libraries/gadtools','utility','icon',
'libraries/easyrexx','libraries/easyrexx_macros','easyrexx', 'amigalib/lists',
'amigalib/argarray','utility','tools/inithook','utility/hooks','easygui/plugins/simplegauge'
MODULE '*acdb_debug','*acdb_gui','*acdb_arexx','*acdb_cd','*acdb_files','*acdb_net','*libs'
#ifdef DEBUG
MODULE 'tools/debug'
#define D(a,b) kputfmt(a,b)
#endif
#ifndef DEBUG
#define D(a,b)
#endif
#define PROGRAM 'ACDB'
#define DESCRIPTION 'CDDB protocol client for Amiga'
#define VERSION '$VER: acdb 1.1 (19.04.99) BETA'
#define WARE 'freeware'
#define COPYRIGHT '©1999, Piotr Gapinski'
#define DEF_DEVICE 'cd.device'
#define DEF_UNIT 0
#define DEF_CDDBPORT 80
#define DEF_CDDBHOST 'www.cddb.com'
#define DEF_ICONFILE 'PROGDIR:acdb'
#define DEF_TEMPPATH 'PROGDIR:temp'
#define DEF_DISKSPATH 'PROGDIR:disks'
#define DEF_PUBSCREEN 'Workbench'
#define DEF_CDTIME 'no'
#define DEF_TRACKTIME 'no'
#define DEF_CLEANTEMP 'yes'
#define ICONIFY PLUGIN
ENUM AREXX_QUIT=1,AREXX_DOWNLOAD,AREXX_CDID,AREXX_TRAY
DEF prg_name:PTR TO CHAR, prg_vers:PTR TO CHAR, prg_copy:PTR TO CHAR
DEF prg_ware:PTR TO CHAR, prg_desc:PTR TO CHAR
DEF tt_device[255]:STRING, tt_unit
DEF tt_cddbhost[255]:STRING, tt_cddbport
DEF tt_iconfile[255]:STRING, tt_disks[255]:STRING, tt_pubname[100]:STRING
DEF tt_temp[255]:STRING
DEF tt_cdtime, tt_tracktime, tt_delete
DEF gad_writeid, gad_abort, gad_progress:PTR TO simplegauge_plugin, gad_download
PROC main() HANDLE
DEF wbm:PTR TO wbstartup, ps:PTR TO process
DEF libs, tt:PTR TO LONG
DEF ig=NIL:PTR TO iconify, cnt, sigs, rc = RETURN_OK, err
DEF setup_cd=FALSE, setup_arx=FALSE, setup_gui=FALSE
prg_name := PROGRAM
prg_desc := DESCRIPTION
prg_vers := VERSION
prg_copy := COPYRIGHT
prg_ware := WARE
libs:=[
['utility.library', 37, {utilitybase}, TRUE],
['reqtools.library', 38, {reqtoolsbase}, TRUE],
['icon.library', 36, {iconbase}, TRUE],
['easyrexx.library', 03, {easyrexxbase}, FALSE]
]
IF openLibs(libs)=FALSE THEN Raise()
IF (wbm := wbmessage)
->-
->- ustaw katalog procesu jeûeli program zostaî
->- uruchomiony z poziomu WB
->- ustaw nazwë ikonki na takâ samâ jak nazwa programu
->-
ps := FindTask(NIL)
ps.currentdir := wbm.arglist.lock
NameFromLock(ps.currentdir, tt_iconfile, 208)
AddPart(tt_iconfile, wbm.arglist.name, 208)
ELSE
->-
->- ustaw domyôlnâ nazwë ikonki
->-
StrCopy(tt_iconfile, DEF_ICONFILE)
ENDIF
tt := argArrayInit()
->-
->- odczytaj parametry przekazywane przez TOOLTYPE
->-
StrCopy(tt_device, argString(tt, 'DEVICE', DEF_DEVICE)) ->- sterownik cd
tt_unit := argInt(tt, 'UNIT', DEF_UNIT) ->- unit
tt_cddbport := argInt(tt, 'PORT', DEF_CDDBPORT) ->- port serwera
StrCopy(tt_cddbhost, argString(tt, 'HOST', DEF_CDDBHOST)) ->- serwer cddb
StrCopy(tt_iconfile, argString(tt, 'ICON', tt_iconfile)) ->- ikonka
StrCopy(tt_temp, argString(tt, 'TEMP', DEF_TEMPPATH)) ->- katalog tymczasowy
StrCopy(tt_disks, argString(tt, 'DISKS', DEF_DISKSPATH)) ->- katalog plików CDID
StrCopy(tt_pubname, argString(tt, 'PUBSCREEN', DEF_PUBSCREEN)) ->- ekran publiczny
tt_cdtime := MatchToolValue(argString(tt, 'CDTIME', DEF_CDTIME), 'yes') ->- umieszczanie caîkowitego czasu pîyty
tt_tracktime := MatchToolValue(argString(tt, 'TRACKTIME',DEF_TRACKTIME), 'yes')
tt_delete := MatchToolValue(argString(tt, 'CLEANTEMP',DEF_CLEANTEMP), 'yes')
D('[MAIN] tt_device \s\n', [tt_device, NIL])
D('[MAIN] tt_unit \d\n', [tt_unit, NIL])
D('[MAIN] tt_cddbhost \s\n', [tt_cddbhost, NIL])
D('[MAIN] tt_cddbport \d\n', [tt_cddbport, NIL])
D('[MAIN] tt_iconfile \s\n', [tt_iconfile, NIL])
D('[MAIN] tt_temp \s\n', [tt_temp, NIL])
D('[MAIN] tt_disks \s\n', [tt_disks, NIL])
D('[MAIN] tt_pubscreen \s\n', [tt_pubname, NIL])
D('[MAIN] tt_cdtime \s\n', [IF (tt_cdtime) THEN 'YES' ELSE 'NO', NIL])
D('[MAIN] tt_tracktime \s\n', [IF (tt_tracktime) THEN 'YES' ELSE 'NO', NIL])
D('[MAIN] tt_cleantemp \s\n', [IF (tt_delete) THEN 'YES' ELSE 'NO', NIL])
argArrayDone()
setup_arx := arxSetup(
->-
->- port arexx'a jest opcjonalny wiëc nie potrzeba sprawdzaê czy udaîo sië go
->- otworzyê
->-
[
AREXX_QUIT, 'QUIT', 'FORCE/S', {arxQuit},
AREXX_CDID, 'CDID', 'DOWNLOAD/S,STORE/S,FORCE/S', {arxCdid},
AREXX_TRAY, 'TRAY', 'OUT/S,IN/S', {arxDisc},
AREXX_DOWNLOAD, 'DOWNLOAD', 'ALL/S,IDFILE/K', {arxDownload},
TABLE_END
]:arexxcommandtable)
D('[MAIN] arexx \s ALLOCAED (\s)\n', [IF (setup_arx) THEN 'IS' ELSE 'NOT', arxPortName(), NIL])
IF (setup_cd := cdSetup(tt_device, tt_unit))=FALSE THEN Throw('Unable to setup %s, unit %ld!', [tt_device, tt_unit, NIL])
IF cdCheck()=FALSE THEN Throw('The device can not be established to be CD-ROM player!', NIL)
setup_gui := guiSetup(prg_name,
->-
->- gui programu pozostawia (niestety) wiele do ûyczenia
->-
[ROWS,
[COLS,
[EQROWS,
gad_writeid := [BUTTON, {guiWrite}, '_WriteID', NIL, "w", NIL, FALSE],
gad_download := [BUTTON, {guiDownload}, '_Download', NIL, "d", NIL, FALSE]
],
[ROWS,
[TEXT, NIL, NIL, FALSE, 10],
[ICONIFY, NIL, NEW ig.create(prg_name, tt_iconfile, tt_pubname)],
[COLS,
[PLUGIN, NIL, NEW gad_progress.simplegauge(
[
PLA_SimpleGauge_ShowText, TRUE,
TAG_DONE
])
],
gad_abort := [BUTTON, {netAbort}, '_Abort', NIL, "a", NIL, TRUE]
]
]
]
],
[
EG_MENU, [ NM_TITLE, 0, 'Project', NIL, 0, 0, NIL,
NM_ITEM, 0, 'About...', '?', 0, 0, {guiAbout},
NM_ITEM, 0, 'Inquire...', 'I', 0, 0, {cdInquire},
NM_ITEM, 0, NM_BARLABEL, NIL, 0, 0, NIL,
NM_ITEM, 0, 'Quit!', 'Q', 0, 0, 0,
NM_END, 0, NIL, NIL, 0, 0, NIL ]:newmenu,
->-
->- okienko nie zostanie otworzone
->-
EG_HIDE, TRUE,
TAG_DONE
])
IF (setup_gui = FALSE) THEN Raise('Unable to setup main window!')
->-
->- gîówna pëtla programu
->- w przypadku nie zainicjalizowania portu arexx'a arxSigs() zwróci 0 (zero)
->- wiëc wszelkie zdarzenia bëdâ ignorowane
->-
WHILE TRUE
sigs := Wait(SIGBREAKF_CTRL_C OR guiSigs() OR arxSigs())
IF (sigs AND guiSigs()) THEN cnt := guiHandle()
IF (sigs AND arxSigs()) THEN cnt := arxHandle()
EXIT (sigs AND SIGBREAKF_CTRL_C)
EXIT (cnt = FALSE)
ENDWHILE
EXCEPT DO
->-
->- zwolnij wszystkie zaalokowane zasoby
->-
IF (setup_gui) THEN guiCleanUp()
IF (setup_arx) THEN arxCleanUp()
IF (setup_cd) THEN cdCleanUp()
END ig, gad_progress
closeLibs(libs)
IF (exception)
->-
->- jeûeli byî bîâd to wyôwietl informacje
->- zwróê do CLI kod bîëdu
->-
err := String(400)
IF (err)
WriteF('\s\n', stringFmt(err, exception, exceptioninfo))
DisposeLink(err)
ENDIF
rc := RETURN_FAIL
ENDIF
ENDPROC rc
->-
->- prywatne
->- procedury obsîugiwane z poziomu GUI
->-
PROC guiAbout()
->-
->- informacje o programie
->- jeûeli port arexx'a nie istnieje arxPortName() zwróci napis 'N/A'
->-
guiInformUser('%s\n-- %s --\n\nVersion: %s\n%s\n\nArexx Port: %s\n%s',
' _Ok ',
[prg_name, prg_ware, prg_vers+11, prg_copy, arxPortName(), prg_desc, NIL])
ENDPROC
PROC guiWrite(info) IS fleWrite()
PROC guiDownload(info) IS fleDownload()
->-
->- prywatne
->- procedury obsîugujâce port Arexx'a
->-
PROC arxQuit(args:PTR TO arxArgs, data)
->-
->- komenda arexx'a powodujâca zakoïczenie programu
->- musi zwróciê FALSE
->-
VOID args
VOID data
ENDPROC FALSE
ENUM TRAY_OUT,TRAY_IN
PROC arxDisc(args:PTR TO arxArgs, data)
->-
->- komenda Arexx'a umoûliwiajâca manipulowanie tackâ napëdu CD-ROM
->- domyôlnie tacka bëdzie wysuwana
->- zawsze zwraca TRUE
->-
DEF eject=TRUE
VOID data
IF (args.argv[TRAY_IN])
eject := FALSE
ELSE
->-
->- domyôlnie nastâpi wysuniëcie pîytki
->- (args.argv[TRAY_OUT])
->-
eject := TRUE
ENDIF
->-
->- przekaû do programu kod powrotny Arexx'a (0=FALSE, 1=TRUE)
->-
args.rclong := IF cdEject(eject)=0 THEN 1 ELSE 0
ENDPROC TRUE
ENUM DOWNLOAD_ALL,DOWNLOAD_IDFILE
PROC arxDownload(args:PTR TO arxArgs, data)
->-
->- komenda Arexx'a umoûliwiajâca ôciâganie z internetu wszystkich identyfikatorów
->- dla zgromadzonych w TEMP plików lub tylko jednego opisu dla pliku o konkretnej nazwie
->-
DEF file:PTR TO CHAR, rc=FALSE, cd
DEF handle
VOID data
IF (file := args.argv[DOWNLOAD_IDFILE])
->-
->- tworzenie struktury cdinfo z podanego pliku
->-
cd := cdRawInfo()
IF (handle := Open(file, MODE_OLDFILE))
IF cdReadInfo(cd, handle)
->-
->- dane odczytane, pobierz informacje z internetu
->-
rc := fleDownload(cd, args)
cdFreeInfo(cd)
ELSE
->-
->- bîâd odczytu lub niewîaôciwy plik
->-
args.err := 'Read error or wrong (CDID) file'
ENDIF
Close(handle)
ELSE
->-
->- bîâd otwarcia pliku
->-
args.err := 'Can not open requested CDID file!'
ENDIF
ELSE
->-
->- wszystko
->- (args.argv[DOWNLOAD_ALL])
->-
rc := fleDownload(NIL, args)
ENDIF
->-
->- przekaû do programu kod powrotny Arexx'a (0=FALSE, 1=TRUE)
->-
args.rclong := IF (rc) THEN 1 ELSE 0
ENDPROC TRUE
ENUM CDID_DOWNLOAD,CDID_STORE,CDID_FORCE
PROC arxCdid(args:PTR TO arxArgs, data)
->-
->- komenda Arexx'a umoûliwiajâca pobranie opisu dla pîyty znajdujâcej sië aktualnie
->- w napëdzie lub zachowanie informacji o pîycie w celu póúniejszego ôciâgniëcia opisu
->- z internetu
->- zawsze zwraca TRUE
->-
DEF cd, force=FALSE, rc
VOID data
force := (args.argv[CDID_FORCE])
IF (args.argv[CDID_DOWNLOAD])
->-
->- pobranie opisu pîyty
->-
IF (cd := cdCreateInfo())
rc := fleDownload(cd, args)
cdFreeInfo(cd)
ELSE
->-
->- bîâd tworzenia opisu pîyty
->-
args.err := 'No CD in drive!'
rc := FALSE
ENDIF
ELSE
->-
->- domyôlnie nastâpi sapisanie CDID do TEMP
->-
rc := fleWrite(force, args)
ENDIF
->-
->- przekaû do programu kod powrotny Arexx'a (0=FALSE, 1=TRUE)
->-
args.rclong := IF (rc) THEN 1 ELSE 0
ENDPROC TRUE